<?php

/**
 * GenProg Lenguaje de Consultas Basado en SQL
 *
 *
 * @author      Carlos Peña <crash.madover@gmail.com>
 * @package     application.libraries.orm.gpql
 * @copyright   (c) 2013, GenProg
 * @version     v 1.0
 */
class GPDL {

  /**
   * Constructor de la Class
   * @access      public
   * @param       string      Class Opcional
   * @return      string      Texto del Modelo
   */
  function __construct($sModelo = '') {
    $this->Modelo = $sModelo;
  }

  // ---------------------------------------------------------------------------

  /**
   * Obtener Definicion del Objeto Revisar el isset de relacion
   *
   * @access      public
   * @param       object 	Nombre del Modelo
   * @param       boolean       Prefijo Aplica
   * @return      object        Model del Nombre
   */
  function ObtenerDefinicion($oObjeto = null, $dPre = FALSE) {
    $Emp = null;
    $pre = $oObjeto->prefijo . '_';
    $preA = '';
    if ($dPre == TRUE) {
      $preA = $oObjeto->prefijo . '_';
    }

    foreach ((object) $oObjeto->struc['cmp'] as $key => $value) {
      $Emp[$pre . $key] = $preA . $key;
    }
    unset($oObjeto);

    return (object) $Emp;
  }

  // ---------------------------------------------------------------------------

  /**
   * Relacion de Tabla y Modelo
   *
   * @access      public
   * @param       string      Prefijo
   * @param       CI_DB       Base De Datos
   * @return      array()
   */
  function ObtenerMapeoRelacional($arr = '', $DB = null) {
    $sPrefijo = '';
    $sClave = '';
    $sValor = '';

    $sConsulta = 'SELECT * FROM Gp_SEsquema';
    if (is_array($arr)) {
      if (isset($arr['ref'])) {
        $sConsulta .= ' WHERE mode=\'' . $arr['ref'] . '\';';
        foreach ($arr as $sC => $sV) {
          if ($sC != 'ref') {
            $sValor = $sV;
            $sClave = $sC;
          }
        }
      } else {
        foreach ($arr as $sC => $sV) {
          $sPrefijo = explode('_', $sC);
          $sValor = $sV;
          $sClave = $sC;
        }
        $sConsulta .= ' WHERE pref=\'' . $sPrefijo[0] . '\';';
      }
    } else {
      $sPrefijo[0] = $arr;
      $sConsulta .= ' WHERE pref=\'' . $sPrefijo[0] . '\';';
    }


    $rs = $DB->query($sConsulta);
    $resultado = $rs->result();
    if ($rs->num_rows() > 0) {
      $resultado[0]->valor = $sValor;
      $resultado[0]->clave = $sClave;
    } else {
      $resultado[0]['Error'] = '1';
    }
    return $resultado[0];
  }

  // ---------------------------------------------------------------------------

  /**
   * Buscar elementos en el Arreglo y mapear al objeto
   *
   * @access      public
   * @param       object 	Nombre del Modelo
   * @param       boolean       Prefijo Aplica
   * @return      object        Model del Nombre
   */
  function MapearObjeto($aObjeto = array(), $bPrefijo = FALSE) {
    $aTablas = array();
    foreach ($aObjeto as $sC => $sV) {
      $sClave = explode("_", $sC);
      if (count($sClave) > 1)
        $aTablas[$sClave[0]][$sC] = $sV;
    }
    return $aTablas;
  }

  // ---------------------------------------------------------------------------

  /**
   * Buscar elementos en el Arreglo y mapear al objeto
   *
   * @access      public
   * @param       string 	Nombre de la Tabla
   * @param       CI_DB         Base De Datos
   * @return      object        Model del Nombre
   */
  function PersistenciaPorTablas($DB = null) {
    $tabla = array();
    $arrAA = array();
    $arrB = array();
    $arrC = array();
    $arrCC = array();
    $sConsulta = 'SELECT * FROM Gp_SEsquema';
    $rs = $DB->query($sConsulta);
    $resultado = $rs->result();
    foreach ($resultado as $sC => $sV) {
      $tabla[] = $sV->tabl;
      $arrAA[] = "/^" . strtolower($sV->mode) . '.' . "/i";
      $arrB[] = "/^" . strtolower($sV->mode) . "$/i";
      $arrC[] = $sV->pref;
      $arrCC[] = $sV->tabl . '.' . $sV->pref . '_';
    }

    $arr['tabla'] = $tabla;
    $arr['tabla_prefijo'] = $arrAA;
    $arr['modelo'] = $arrB;
    $arr['prefijo'] = $arrC;
    $arr['campo_prefijo'] = $arrCC;

    return $arr;
  }

  // ---------------------------------------------------------------------------

  /**
   * Buscar elementos en el Arreglo y mapear al objeto
   *
   * @access      public
   * @param       string 	Nombre de la Tabla
   * @param       CI_DB         Base De Datos
   * @return      object        Model del Nombre
   */
  function PersistenciaPorColumna($sTabla = '', $aValor = array(), $DB = null) {
    $arr['where'] = ''; //No tiene Relacion 
    $sConsulta = '';
    $sWhere = '';
   
    $sActualizar = 'SELECT * FROM ' . $sTabla . ' WHERE ';
    if ($sTabla != '') {
      $sConsulta = 'SHOW INDEX FROM ' . $sTabla . ';';
    }
    $rs = $DB->query($sConsulta);
    $resultado = $rs->result();
    $i = 0;
    //$iCantidad = count($resultado);
    foreach ($resultado as $sC => $sV) {
      ++$i;
      if ($i < 2) {
        $sWhere .= $sV->Column_name . '=\'' . $aValor[$sV->Column_name] . '\'';
      }
    }
    $sActualizar .= $sWhere;
    //Pregunta si existe lo modifica
    if ($sTabla != 'K_RDirecciones') {
      $rsConexion = $DB->query($sActualizar);
      if ($rsConexion->num_rows() > 0) {
        $arr['where'] = $sWhere;
      }
    }
    return $arr;
  }

}

?>